﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Util;
using RegraNegocio;
using Model;

namespace ControleDePedidos
{
    public partial class Cliente : Form
    {
        private Model.Cliente cliente = null;

        public Cliente()
        {
            InitializeComponent();
            this.cmbAcao.SelectedIndex = 0;
            dtgResultado.AutoGenerateColumns = false;
        }

        private void btnSalvar_Click(object sender, EventArgs e)
        {
            cliente = new Model.Cliente();

            if (cmbAcao.SelectedIndex.Equals(0))
            {
                txtID.Text = "0";

                Dictionary<String, String> camposValidados = FormularioUtil.getInstance().validarCampos(this.Controls);

                if (camposValidados != null && camposValidados.Count > 0)
                {
                    foreach (var chave in camposValidados)
                    {
                        MessageBox.Show(chave.ToString().Replace(',', ':'), "Atenção");
                    }
                    return;
                }
                else
                {
                    cliente.Nome = txtNome.Text;
                    cliente.CpfCnpj = txtCPF_CNPJ.Text;
                    cliente.Endereco = txtEndereco.Text;
                    cliente.Bairro = txtBairro.Text;
                    cliente.Cidade = txtCidade.Text;
                    cliente.Uf = txtUF.Text;
                    cliente.Tel1 = txtTel1.Text;
                    cliente.Tel2 = txtTel2.Text;
                    cliente.Tel3 = txtTel3.Text;
                }

                if (ClienteBO.getInstance().gravar(cliente))
                {

                    MessageBox.Show(String.Format("Sucesso na inserção do Cliente {0} ", cliente.Nome));

                    FormularioUtil.getInstance().limparCampos(this.Controls);

                    cmbAcao.SelectedIndex = 0;
                }
                else
                {
                    MessageBox.Show("Erro na inserção do Cliente.");
                }

            }

            else if (cmbAcao.SelectedIndex.Equals(1))
            {
                if (txtID.Text.Equals("") && txtNome.Text.Equals("") && txtCPF_CNPJ.Text.Equals(""))
                {
                    MessageBox.Show("Favor preencher um dos campos para busca: Codigo / Nome / CPF_CNPJ");

                    return;
                }

                if (!txtID.Text.Equals(""))
                {
                    if (FormularioUtil.getInstance().isInteiro(txtID.Text))
                    {
                        cliente.Codigo = int.Parse(txtID.Text);
                    }
                    else
                    {
                        MessageBox.Show("O código digitado deve ser um número inteiro!");

                        return;
                    }
                }

                if (!txtNome.Text.Equals(""))
                {
                    cliente.Nome = txtNome.Text;
                }

                if (!txtCPF_CNPJ.Text.Equals(""))
                {
                    cliente.CpfCnpj = txtCPF_CNPJ.Text;
                }

                preencheGrid(cliente);

                cmbAcao.SelectedIndex = 1;
            }

            else if (cmbAcao.SelectedIndex.Equals(2))
            {
                Dictionary<String, String> camposValidados = FormularioUtil.getInstance().validarCampos(this.Controls);

                if (camposValidados != null && camposValidados.Count > 0)
                {
                    foreach (var chave in camposValidados)
                    {
                        MessageBox.Show(chave.ToString().Replace(',', ':'), "Atenção");
                    }
                    return;
                }
                else
                {
                    cliente.Codigo = int.Parse(txtID.Text);
                    cliente.Nome = txtNome.Text;
                    cliente.CpfCnpj = txtCPF_CNPJ.Text;
                    cliente.Endereco = txtEndereco.Text;
                    cliente.Bairro = txtBairro.Text;
                    cliente.Cidade = txtCidade.Text;
                    cliente.Uf = txtUF.Text;
                    cliente.Tel1 = txtTel1.Text;
                    cliente.Tel2 = txtTel2.Text;
                    cliente.Tel3 = txtTel3.Text;
                }

                if (ClienteBO.getInstance().alterar(cliente))
                {

                    MessageBox.Show(String.Format("Sucesso na alteração do Cliente {0} ", cliente.Nome));

                    FormularioUtil.getInstance().limparCampos(this.Controls);

                    cmbAcao.SelectedIndex = 2;

                    preencheGrid(cliente);
                }
                else
                {
                    MessageBox.Show("Erro na alteração do Cliente.");
                }
            }

            else if (cmbAcao.SelectedIndex.Equals(3))
            {
                if (!txtID.Text.Equals(""))
                {
                    if (FormularioUtil.getInstance().isInteiro(txtID.Text))
                    {
                        cliente.Codigo = int.Parse(txtID.Text);

                        if (ClienteBO.getInstance().excluir(cliente))
                        {
                            MessageBox.Show(String.Format("Sucesso na exclusão do Cliente {0} ", cliente.Nome));

                            FormularioUtil.getInstance().limparCampos(this.Controls);

                            cmbAcao.SelectedIndex = 3;

                            preencheGrid(cliente);
                        }
                        else
                        {
                            MessageBox.Show("Erro na exclusão do Cliente.");
                        }
                    }
                    else
                    {
                        MessageBox.Show("O código digitado deve ser um número inteiro!");
                        return;
                    }
                }
            }
        }

        private void cmbAcao_SelectedIndexChanged_1(object sender, EventArgs e)
        {
            if (cmbAcao.SelectedIndex.Equals(0))
            {
                lblID.Visible = false;
                txtID.Visible = false;
                txtID.Enabled = false;
                txtNome.Enabled = true;
                txtCPF_CNPJ.Enabled = true;
                txtEndereco.Enabled = true;
                txtBairro.Enabled = true;
                txtCidade.Enabled = true;
                txtUF.Enabled = true;
                txtTel1.Enabled = true;
                txtTel2.Enabled = true;
                txtTel3.Enabled = true;
                btnSalvar.Text = ("Cadastrar");
            }
            else if (cmbAcao.SelectedIndex.Equals(1))
            {
                lblID.Visible = true;
                txtID.Visible = true;
                txtID.Enabled = true;
                txtNome.Enabled = true;
                txtCPF_CNPJ.Enabled = true;
                txtEndereco.Enabled = false;
                txtBairro.Enabled = false;
                txtCidade.Enabled = false;
                txtUF.Enabled = false;
                txtTel1.Enabled = false;
                txtTel2.Enabled = false;
                txtTel3.Enabled = false;
                btnSalvar.Text = ("Consultar");
            }
            else if (cmbAcao.SelectedIndex.Equals(2))
            {
                lblID.Visible = true;
                txtID.Visible = true;
                txtID.Enabled = false;
                txtNome.Enabled = true;
                txtCPF_CNPJ.Enabled = false;
                txtEndereco.Enabled = true;
                txtBairro.Enabled = true;
                txtCidade.Enabled = true;
                txtUF.Enabled = true;
                txtTel1.Enabled = true;
                txtTel2.Enabled = true;
                txtTel3.Enabled = true;
                btnSalvar.Text = ("Editar");
            }
            else if (cmbAcao.SelectedIndex.Equals(3))
            {
                lblID.Visible = true;
                txtID.Visible = true;
                txtID.Enabled = false;
                txtNome.Enabled = false;
                txtCPF_CNPJ.Enabled = false;
                txtEndereco.Enabled = false;
                txtBairro.Enabled = false;
                txtCidade.Enabled = false;
                txtUF.Enabled = false;
                txtTel1.Enabled = false;
                txtTel2.Enabled = false;
                txtTel3.Enabled = false;
                btnSalvar.Text = ("Excluir");
            }
        }

        private void dtgResultado_Click(object sender, EventArgs e)
        {
            DataGridViewRow linhaAtual = dtgResultado.CurrentRow;

            cliente = new Model.Cliente();

            cliente.Codigo = Int32.Parse(linhaAtual.Cells[0].Value.ToString());

            cliente = ClienteBO.getInstance().consulta(cliente);

            txtID.Text = cliente.Codigo.ToString();
            txtNome.Text = cliente.Nome;
            txtCPF_CNPJ.Text = cliente.CpfCnpj;
            txtEndereco.Text = cliente.Endereco;
            txtBairro.Text = cliente.Bairro;
            txtCidade.Text = cliente.Cidade;
            txtUF.Text = cliente.Uf;
            txtTel1.Text = cliente.Tel1;
            txtTel2.Text = cliente.Tel2;
            txtTel3.Text = cliente.Tel3;
        }

        private void preencheGrid(Model.Cliente cliente)
        {
            try
            {
                List<Model.Cliente> clientesRecuperados = ClienteBO.getInstance().recuperarClientes(cliente);

                dtgResultado.DataSource = clientesRecuperados;
                dtgResultado.Visible = true;
            }
            catch (Exception cause)
            {
                dtgResultado.DataSource = null;
                dtgResultado.Visible = false;
                MessageBox.Show(cause.Message);
            }
        }
    }
}